package br.edu.fateczl.dao;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JOptionPane;

import br.edu.fateczl.model.Funcionario;
import br.edu.fateczl.model.Cliente;
import br.edu.fateczl.model.Pessoa;
import br.edu.fateczl.model.Usuario;

public class PessoaDAO {
	Connection c;

	public PessoaDAO() {
		GenericDAO gDao = new GenericDAO();
		c = gDao.getConnection();
	}

	public boolean inserePessoa(Pessoa pessoa) {
		boolean inserido = false;
		String sql = "INSERT INTO pessoa (nome,data_nascimento,rg,codigo_endereco,codigo_contato) VALUES (?,?,?,?,?)";

		try {
			PreparedStatement ps = c.prepareStatement(sql);
			ps.setString(1, pessoa.getNome());
			ps.setDate(2, (Date) pessoa.getDataNasc());
			ps.setString(3, pessoa.getRg());
			ps.setInt(4, pessoa.getCodigo_endereco());
			ps.setInt(5, pessoa.getCodigo_contato());
			ps.execute();
			ps.close();
			inserido = true;
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null, e.getMessage(), "Erro",
					JOptionPane.ERROR_MESSAGE);
		}
		return inserido;
	}

	public boolean atualizaPessoa(Pessoa pessoa) {
		boolean atualizado = false;
		String sql = "UPDATE pessoa Set nome = ?, data_nascimento = ?, rg = ? WHERE codigo = ?";
		
		try {
			PreparedStatement ps = c.prepareStatement(sql);
			ps.setString(1, pessoa.getNome());
			ps.setDate(2, (Date) pessoa.getDataNasc());
			ps.setString(3, pessoa.getRg());
			ps.setInt(4, pessoa.getCodigo());
			ps.execute();
			ps.close();
			atualizado = true;
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null, e.getMessage(), "Erro",
					JOptionPane.ERROR_MESSAGE);
		}
		return atualizado;

	}

	public boolean excluiPessoa(Pessoa pessoa) {
		boolean excluido = false;
		String sql = "DELETE pessoa WHERE codigo = ?";
		try {
			PreparedStatement ps = c.prepareStatement(sql);
			ps.setInt(1, pessoa.getCodigo());
			ps.execute();
			ps.close();
			excluido = true;
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null, e.getMessage(), "Erro",
					JOptionPane.ERROR_MESSAGE);
		}
		return excluido;
	}

	public Pessoa consultaPessoa(Pessoa pessoa) {
		Pessoa pessoaConsultada = new Funcionario();
		String sql = "SELECT codigo,nome,data_nascimento,rg,codigo_endereco,codigo_contato FROM pessoa Where codigo = ?";
		try {
			PreparedStatement ps = c.prepareStatement(sql);
			ps.setInt(1, pessoa.getCodigo());
			ResultSet rs = ps.executeQuery();
			if (rs.next()) {
				
				pessoaConsultada.setCodigo(rs.getInt("codigo"));
				pessoaConsultada.setNome(rs.getString("nome"));				
				pessoaConsultada.setDataNasc(rs.getDate("data_nascimento"));
				pessoaConsultada.setRg(rs.getString("rg"));
				pessoaConsultada.setCodigo_endereco(rs
						.getInt("codigo_endereco"));
				pessoaConsultada.setCodigo_contato(rs.getInt("codigo_contato"));
			}
			rs.close();
			ps.close();
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null, e.getMessage(), "Erro",
					JOptionPane.ERROR_MESSAGE);
		}
		return pessoaConsultada;
	}

	public List<Pessoa> consultaListaPessoa() {
		List<Pessoa> listaUsuario = new ArrayList<Pessoa>();
		StringBuffer sql = new StringBuffer();
		sql.append("SELECT codigo,nome,data_nascimento,rg,codigo_endereco,codigo_contato FROM PESSOA");
		try {
			PreparedStatement ps = c.prepareStatement(sql.toString());
			ResultSet rs = ps.executeQuery();
			while (rs.next()) {

				Pessoa pessoaConsultada = new Funcionario();
				pessoaConsultada.setCodigo(rs.getInt("codigo"));
				pessoaConsultada.setNome(rs.getString("nome"));
				pessoaConsultada.setDataNasc(rs.getDate("data_nascimento"));
				pessoaConsultada.setRg(rs.getString("rg"));
				pessoaConsultada.setCodigo_endereco(rs
						.getInt("codigo_endereco"));
				pessoaConsultada.setCodigo_contato(rs.getInt("codigo_contato"));

				listaUsuario.add(pessoaConsultada);
			}
			rs.close();
			ps.close();
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null, e.getMessage(), "Erro",
					JOptionPane.ERROR_MESSAGE);
		}
		return listaUsuario;
	}

	public int selecionarUltimaPessoa() throws SQLException {
		String sql = "select max(codigo) as codigo from pessoa";
		Connection con = GenericDAO.getConnection();
		PreparedStatement prepare = con.prepareStatement(sql);
		ResultSet result = prepare.executeQuery();
		int codigo = 0;

		while (result.next()) {
			codigo = result.getInt("codigo");
		}

		return codigo;
	}

	
}
